<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      function getJson(url) {
        return new Promise((resolve, reject) => {
          const xhr = XMLHttpRequest
            ? new XMLHttpRequest()
            : new ActiveXObject("Mscrosoft.XMLHttp");
          xhr.open("GET", url, false);
          xhr.setRequestHeader("Accept", "application/json");
          xhr.onreadystatechange = function () {
            if (xhr.readyState != 4) return;
            // 0：请求未初始化，还没有调用 open()。
            // 1：请求已经建立，但是还没有发送，还没有调用 send()。
            // 2：请求已发送，正在处理中（通常现在可以从响应中获取内容头）。
            // 3：请求在处理中；通常响应中已有部分数据可用了，没有全部完成。
            // 4：响应已完成；您可以获取并使用服务器的响应了。
            if (xhr.status == 200 || xhr.status == 304) {
              // 如果客户端发送了一个带条件的 GET 请求且该请求已被允许，
              // 而文档的内容（自上次访问以来或者根据请求的条件）并没有改变，则服务器应当返回这个状态码。
              resolve(xhr.responseText);
            } else {
              reject(new Error(xhr.responseText));
            }
          };
          xhr.send();
        });
      }
    </script>
  </body>
</html>
